Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

237
Vistas
Angular 9 SSR - where to set global['window'] (using domino)?

After upgrading to Angular 9, I'm getting error ReferenceError: window is not defined when running yarn serve:ssr.

In our Angular apps, we use trick with Domino to emulate window for SSR (as in https://github.com/Angular-RU/angular-universal-starter/blob/master/server.ts#L21 ).

So after ng update I have added these lines after imports in server.ts:


const distFolder = join(process.cwd(), 'dist/browser');
const indexHtml = existsSync(join(distFolder, 'index.original.html')) ? 'index.original.html' : 'index';

// Emulate browser APIs
const domino = require('domino');
const fs = require('fs');
const templateA = fs.readFileSync(join(distFolder, indexHtml)).toString();

const win = domino.createWindow(templateA);
win.Object = Object;
win.Math = Math;
global['window'] = win;
global['document'] = win.document;

However, it seems that setting global['window'] is happening either too late or never.

Do you have any idea where to set global['window'] so the angular components and libraries can access it in SSR?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Solved, thanks to this comment https://github.com/angular/universal/issues/1678#issuecomment-627031128

The key is to have line

import { AppServerModule } from './src/main.server';

after the definition of global['window']

Beware the autoformatters in your editor, which usually put the import lines on top of the file automatically :)

over 4 years ago · Santiago Trujillo Denunciar

0

I put it below the imports and above the app() method


import { ngExpressEngine } from '@nguniversal/express-engine';
import * as express from 'express';
import { join } from 'path';

import { AppServerModule } from './src/main.server';
import { APP_BASE_HREF } from '@angular/common';
import { existsSync, readFileSync } from 'fs';
import * as domino from 'domino';
import * as core from 'express-serve-static-core';


const template = join('browser', 'index.html');
const win = domino.createWindow(template);

global['window'] = win;
global['document'] = win.document;

// The Express app is exported so that it can be used by serverless Functions.
export function app(): core.Express {
over 4 years ago · Santiago Trujillo Denunciar

0

I do two tasks to fix it.

first - in angular.json set "optimization": false for server build, its helps find 3d paty module what calls error

second - i move up domino in my server.ts

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda